package com.ruoyi.common.websocket;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @author ab785
 * createTime: 2021-12-4.
 * description: 消息实体
 * 使用方式：在前端对应组件中可使用 globalEventHandler 监听  eventType 值对应的事件
 */
@Data
public class SocketMessageVo<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 事件类型
     * 其他事件触发前端的对应注册事件
     * notify值为通知事件
     */
    private String eventType;

    /**
     * 绑定数据
     */
    private T data;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 构造函数
     *
     * @param eventType 事件类型
     * @param data      事件数据
     */
    public SocketMessageVo(String eventType, T data) {
        this.eventType = eventType;
        this.data = data;
        this.createTime = new Date();
    }

    /**
     * 创建notify消息实体
     */
    public static SocketMessageVo<SocketMessageNotifyData> createNotifyVo(SocketMessageNotifyData notifyData) {
        return new SocketMessageVo<>(EventType.NOTIFY, notifyData);
    }

    /**
     * 事件类型
     */
    public static class EventType {

        /**
         * 通知事件
         */
        public static final String NOTIFY = "notify";

        /**
         * 心跳反应事件
         */
        public static final String HEART = "heart";

        /**
         * 登录成功
         */
        public static final String LOGIN_SUCCESS = "loginSuccess";

        /**
         * 绑定成功
         */
        public static final String BIND_SUCCESS = "bindSuccess";

        /**
         * 刷新列表
         */
        public static final String REFRESH_LIST = "refreshList_";
    }
}

